// 以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [starti, endi] 。
// 请你合并所有重叠的区间，并返回一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间。

// 示例 1：
// 输入：intervals = [[1,3],[2,6],[8,10],[15,18]]
// 输出：[[1,6],[8,10],[15,18]]
// 解释：区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

// 示例 2：
// 输入：intervals = [[1,4],[4,5]]
// 输出：[[1,5]]
// 解释：区间 [1,4] 和 [4,5] 可被视为重叠区间。

// 提示：
//     1 <= intervals.length <= 104
//     intervals[i].length == 2
//     0 <= starti <= endi <= 104

/////////思路：首先要排序，再比较当前的右边界和前一个的左边界
/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */
var merge = function(intervals) {
    intervals.sort((a, b)=>{
        return a[0] - b[0];
    });
    let flag = false;
    let result = [];
    let len = intervals.length;
    for(let i = 1; i < len; i++) {
        let start = intervals[i - 1][0];
        let end = intervals[i - 1][1];
        while(i < len && intervals[i][0] <= end) {
            
            end = Math.max(intervals[i][1], end);
            if (i === len - 1) {
                flag = true;
            }
            i++;
        }
        result.push([start, end]);
    }
    if (!flag) {
        result.push([intervals[len - 1][0], intervals[len - 1][1]]);
    }
    return result;
};
console.log(merge([[1,3],[2,6],[8,10],[15,18]]));
